package cn.ynrcb.personnelfile.common.utils;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 分页工具类
 */
public class PageUtils implements Serializable {
	private static final long serialVersionUID = 1L;
	/**
	 * 总记录数
	 */
	private int totalCount;
	/**
	 * 每页记录数
	 */
	private int pageSize;
	/**
	 * 总页数
	 */
	private int totalPage;
	/**
	 * 当前页数
	 */
	private int currPage;
	/**
	 * 列表数据
	 */
	private List<?> list;

	/**
	 * 分页
	 * @param list        列表数据
	 * @param totalCount  总记录数
	 * @param pageSize    每页记录数
	 * @param currPage    当前页数
	 */
	public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {
		this.list = list;
		this.totalCount = totalCount;
		this.pageSize = pageSize;
		this.currPage = currPage;
		this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
	}

	/**
	 * 分页
	 */
	public PageUtils(IPage<?> page) {
		this.list = page.getRecords();
		this.totalCount = (int)page.getTotal();
		this.pageSize = (int)page.getSize();
		this.currPage = (int)page.getCurrent();
		this.totalPage = (int)page.getPages();
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getCurrPage() {
		return currPage;
	}

	public void setCurrPage(int currPage) {
		this.currPage = currPage;
	}

	public List<?> getList() {
		return list;
	}

	public void setList(List<?> list) {
		this.list = list;
	}


	/**
	 * 将PageInfo对象泛型中的Po对象转化为Vo对象
	 *
	 * @param pageInfoPo PageInfo<Po>对象</>
	 * @param <V>        V类型
	 * @return
	 */
	public static <P,V> IPage<V> pageVoCovert(IPage<P> pageInfoPo, Class<V> v) {
		// 创建Page对象，实际上是一个ArrayList类型的集合
		try {
			if (pageInfoPo != null) {

				IPage<V> page = new Page<>(pageInfoPo.getCurrent(), pageInfoPo.getSize());
				page.setTotal(pageInfoPo.getTotal());
				List<P> records = pageInfoPo.getRecords();
				List<V> list = new ArrayList<>();
				for (P record : records) {
					if(record!=null){
						V newV = v.newInstance();
						// 把原对象数据拷贝到新的对象
						BeanUtil.copyProperties(record,newV);
						list.add(newV);
					}
				}
				page.setRecords(list);
				page.setTotal(pageInfoPo.getTotal());
				return page;
			}
		}catch (Exception e){
			e.printStackTrace();
		}
		return null;
	}


}
